package pb;

import pa.P;
import pa.Parent;

class S extends P {
    public S(int d) {
        super(d);
    }
}

public class Son extends Parent {

    // 隐藏父类型的函数版本
    public void displayAnother(int x,int y) {
        System.out.println(pro_data);
        System.out.println(pub_data);
        System.out.println(x - y);
    }

    // 子类型会将父类型的保护段和公有段成员
    // 继承下来直接使用，权限不变
    // 子类型声明同名函数隐藏父类型的函数
    public S display() {
        // super.display();
        System.out.println(super.getPri_data());
        System.out.println(super.pro_data);
        System.out.println(super.pub_data);
        return new S(super.getPri_data());
    }

    public void excuteDisplayOfParent() {
        // super.display(); // 调用父类型版本
        this.display(); // 调用子类型的版本，this.可以省略
    }

    // 函数名一样，但是形参部分有区别，不是隐藏，而是重载
    public int add(int offset, int anotherOffset) {
        return super.getPri_data() +
                pro_data + pub_data + offset
                + anotherOffset;
    }
}
